package edu.upn.evolucion.proventas.datos;

import edu.upn.evolucion.proventas.entidades.UnidadMedida;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class UnidadMedidaDAO {
    private static UnidadMedidaDAO instancia;

    private UnidadMedidaDAO() {
    }
    
    public static UnidadMedidaDAO obtenerInstancia() {
        if (instancia == null) {
            instancia = new UnidadMedidaDAO();
        }
        return instancia;
    }
    public void registrar(UnidadMedida objUnidadMedida) {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            String insert = ""
                    + "INSERT INTO unidad_de_medida(nombre) "
                    + "VALUES(" 
                    + "'" + objUnidadMedida.getNombre() + "')";
            stmt.executeUpdate(insert);
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    public String eliminar(int idUnidadMedida) {
        
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            //String delete = "delete from telefonoCliente where idCliente = " + idCliente;
            //stmt.executeUpdate(delete); 
            
            String delete = "delete from unidad_de_medida where id = " + idUnidadMedida;
            stmt.executeUpdate(delete); 
            
            
            
            //5. Cerrar conexion
            stmt.close();
            return "Unidad de Medida eliminada"; 
        } catch (Exception e) {
            e.printStackTrace();
            return "Error al eliminar Unidad de Medida"; 
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    public void modificar(UnidadMedida objUnidadMedida) {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            String update = ""
                    + "update unidad_de_medida c set "
                    + "c.nombre = '" + objUnidadMedida.getNombre() + "' where c.id = " + objUnidadMedida.getId();
            stmt.executeUpdate(update);
            
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    public ArrayList<UnidadMedida> buscar(String nombre) {
        Connection con = ConnectionManager.getConnection();
        try {
           
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            //Un objeto ResultSet, almacena los datos de resultados de una consulta
            ResultSet tabla = stmt.executeQuery("SELECT c.id, c.nombre "
                                            + "FROM unidad_de_medida c "
                                            + "WHERE c.nombre like '%" + nombre + "%' ORDER BY c.id");
            
            //System.out.println("Codigo\tNombre");
            ArrayList<UnidadMedida> coleccion = new ArrayList<UnidadMedida>();
            while(tabla.next()){
                UnidadMedida obj = new UnidadMedida();
                obj.setId(tabla.getInt(1));
                obj.setNombre(tabla.getString(2));
                coleccion.add(obj);
                //System.out.println(tabla.getInt(1)+"\t"+tabla.getString(2));
            }
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
            return coleccion;
        } catch (Exception e) {
            e.printStackTrace(); 
            ArrayList<UnidadMedida> c = new ArrayList<UnidadMedida>();
            return c;
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    
    public ArrayList<UnidadMedida> buscar() {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            //Un objeto ResultSet, almacena los datos de resultados de una consulta
            ResultSet tabla = stmt.executeQuery("SELECT um.id, um.nombre "
                                            + "FROM unidad_de_medida um ORDER BY um.id ");
            
            //System.out.println("Codigo\tNombre");
            ArrayList<UnidadMedida> coleccion = new ArrayList<UnidadMedida>();
            while(tabla.next()){
                UnidadMedida obj = new UnidadMedida();
                obj.setId(tabla.getInt(1));
                obj.setNombre(tabla.getString(2));
                coleccion.add(obj);
                //System.out.println(tabla.getInt(1)+"\t"+tabla.getString(2));
            }
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
            return coleccion;
        } catch (Exception e) {
            e.printStackTrace(); 
            ArrayList<UnidadMedida> um = new ArrayList<UnidadMedida>();
            return um;
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
}
